package com.yoyo.itravel.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * @Description TODO
 * 
 * @author HZX
 * @date 2020/6/15 15:08
 * @version 1.0
 */
public class MybatisUtils {

    private static String configName; // Mybatis的xml文件名称
    private static SqlSession session;

    /** 读取配置文件 **/
    // static {
    //     // 构建Properties对象
    //     Properties props = new Properties();
    //
    //     try {
    //         // 加载配置文件
    //         props.load(MybatisUtils.class.getClassLoader().getResourceAsStream("mybatis.properties"));
    //         // 读取配置文件
    //         configName = props.getProperty("config_name", "SqlMapConfig.xml");
    //
    //         // 当虚拟机关闭时，关闭SqlSession对象
    //         Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    //             public void run() {
    //                 if (session != null) {
    //                     System.out.println("**********************SqlSession关闭*********************");
    //                     session.close();
    //                 }
    //             }
    //         }));
    //     } catch (IOException e) {
    //         e.printStackTrace();
    //     }
    //
    // }

    /** 私有化构造器 **/
    private MybatisUtils() {}

    /**
     * @Description 打开会话--获得SqlSession对象
     *
     * @param isAutoCommit
     * @return org.apache.ibatis.session.SqlSession
     */
    public static SqlSession openSession(boolean isAutoCommit) throws IOException {
        // 读取Mybatis的xml配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 构建构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        // 通过构建者对象获得工厂对象
        SqlSessionFactory factory = builder.build(is);
        // 通过工厂对象获得SqlSession对象
        session = factory.openSession();
        // 返回session对象
        return session;
    }
}
